perm filename IBM360[MU5,LCS] blob
sn#107296 filedate 1974-06-19 generic text, type T, neo UTF8
C*SCOR5-- FOR IBM360 (OLDER VERSION C.1970) NEEDS LOCAL RANDOM GEN.
BLOCK DATA
COMMON /X/ P(30),J,L,CNT(10),BT,MK,VX(35),PL(30),DF,IXIN,NINS,TF,
1 ROFF(10),V(2000),NP(10),PCH(10,32),INST(11),DUR(11),IALL,
1DURX,AMPFAC,BNW(40),IT(30),I,OP1,INUM(10),BG(80),INP(72),TP,
1NWZ,CVTX,ISCA(12),IDAT(11),IQ(25),SCAL(86),MU5(14)
1,LIST(78),ALL(10,31)
C INST AND DUR MUST HAVE 1 MORE THAN MAX NUM OF INSTS IN ARRAYS!!!
DATA ISCA/'C','P','D','N','E','F','U','G','S','A','V','B'/
DATA IDAT/'0','1','2','3','4','5','6','7','8','9','.'/
DATA MU5/'T','C','2','N','V','R','3','4','X','I','H','M','D','S'/
C OUT, OSC, AD2, RAN, ENV, STR, AD3, AD4, MLT, SET, RAH.(CONT AND FLT NOT USED.
DATA V/2000*0/,BT/0/,PL/30*0/,I/1/,NINS/0/,IXIN/1/,TP/0/,NWZ/1/,
1CNT/10*0/,NP/10*0/,PCH/320*0/,CVTX/10000./,DURX/19999./,PL/30*1./
1,AMPFAC/1./,TF/1./,IALL/0/,ALL/310*-1/
DATA SCAL/'C1','CS1','D1','DS1','E1','F1','FS1','G1',
1 'GS1','A1','AS1','B1','C2','CS2','D2','DS2','E2',
1 'F2','FS2','G2','GS2','A2','AS2','B2','C3','CS3','D3','DS3',
1 'E3','F3','FS3','G3','GS3','A3', 'AS3','B3','C4','CS4',
1 'D4','DS4','E4','F4','FS4','G4','GS4','A4','AS4','B4','C5','CS5'
1 ,'D5','DS5','E5','F5','FS5','G5','GS5','A5','AS5','B5','C6','CS6'
1 ,'D6','DS6','E6','F6','FS6','G6','GS6','A6','AS6','B6','C7','CS7'
1 ,'D7','DS7','E7','F7','FS7','G7','GS7','A7','AS7','B7','R','END'/
END
C IF DESIRED, A SUBROUTINE WITH THE FOLLOWING HEADING:
C SUBROUTINE SUBR
C COMMON /X/ P(30),INST,IPAR,CNT(10),BT,IREST,CVT(35),PL(30),DF
C INST=INST N. IPAR=PARAM N. DF=DUTY FACTOR. WHEN SUBROUTINE IS CALLED
COMMON /X/ P(30),J,L,CNT(10),BT,MK,VX(35),PL(30),DF,IXIN,NINS,TF,
1 ROFF(10),V(2000),NP(10),PCH(10,32),INST(11),DUR(11),IALL,
1DURX,AMPFAC,BNW(40),IT(30),I,OP1,INUM(10),BG(80),INP(72),TP,
1NWZ,CVTX,ISCA(12),IDAT(11),IQ(25),SCAL(86),MU5(14)
1,LIST(78),ALL(10,31)
DATA ICOM/','/,IMIN/'-'/,ISEMI/';'/,DEBUG/0/,PARENS/0/,LN/0/,
1IBLA/' '/,KSLA/'/'/,IEND2/'END;'/,IEND/'END'/,JZ/0/,KL/0/,RA/0/,
1BY/-1./,LPAR/0/,ITMPO/'TEMP'/,IRUN2/'RUN;'/,IRUN/'RUN'/,KZY/10/
1,IDALL/0/,ISTAR/'*'/,ILFP/'('/,IAT/'@'/,IPLUS/'+'/,LCNT/1/
1,RETRO/-1./,INVRT/-1/,IRTP/')'/,IEL/'L'/,IDOL/'$'/
EQUIVALENCE (V2,V(2)),(V3,V(3)),(V4,V(4)),(VX2,VX(2)),(VX1,VX(1))
1,(IPP,ISCA(2)),(VX3,VX(3)),(V5,V(5)),(IEN,ISCA(4)),(IE,ISCA(5))
1,(VX4,VX(4)),(VX5,VX(5)),(VX6,VX(6)),(IU,ISCA(7)),(ITT,MU5(1))
1,(ISS,ISCA(9)),(IV,ISCA(11)),(ID,ISCA(3)),(IF,ISCA(6)),(IDOT,
1IDAT(11)),(IEM,MU5(12)),(II,MU5(10)),(IR,MU5(6)),(IXX,MU5(9))
1,(IG,ISCA(8)),(IAA,ISCA(10))
C IF DIMENSIONS ARE CHANGED, CHANGE KZY. ALL CHANGES MUST BE MULTIPLES OF KZY.
C SET INST(KZY+1), CHECK BG, CHECK BLOCK DATA VALUES.
DO 1900 K=1,10
1900 INUM(K)=K
C SET NDEC TO 5 FOR IBM.
3000 FORMAT(1X72A1)
JMP=1
8002 JA=-1
ICT=0
IF(JZ.EQ.-1)GO TO 1773
8001 READ(5,5900)INP
C REMOVE KW ETC. FOR IBM.
7006 PRINT 3000,INP
IF(INP(1).EQ.IBLA)GO TO 8001
C BLANK LINES MAY APPEAR IN INSTS.
MLX=1
GO TO 1773
101 ISUB=5
IZ=15
N=INP(ML+2)
DO 2900 K=1,14
2900 IF(N.EQ.MU5(K))IZ=K
IF(IZ.NE.1)GO TO 3900
IF(INP(ML).EQ.IEM)IZ=9
IF(INP(ML).EQ.ISS)IZ=10
IF(INP(ML+1).EQ.IR)IZ=12
GO TO 4900
3900 IF(INP(ML).NE.IG)GO TO 4900
ISUB=6
GO TO 2899
4900 IF(IZ.LE.11)GO TO 9015
IZ=IZ-11
GO TO (9018,9014,6900,1129),IZ
C SRT END INS SCORE
C ABOVE FOR UNIT GENERATORS
6900 Y=36.
ISUB=12
GO TO 2899
12 V2=2.
V3=VX1
V4=VX2
L=4
GO TO 72
5 L=JJ+4
DO 9021 K=5,L
9021 V(K)=VX(K-4)
GO TO(72,172,72,172,172,72,72,72,72,72,172,72,72),IZ
172 NL=1
IF(IZ.EQ.4)NL=3
IF(IZ.EQ.11)NL=2
DO 472 K=1,NL
Y=Y-1.
L=L+1
472 V(L)=Y
IF(IZ.EQ.2)L=9
C ABOVE ALLOWS A 'V' TO BE PUT AT END OF OSC.
72 M=L-1
WRITE(8)M,(V(K),K=2,L)
C WRITE(6,5552)M,(V(K),K=2,L)
6006 PRINT 5552,M,(V(K),K=2,L)
IF(LPAR)2129,8002,8002
5552 FORMAT(I3,(14F9.2))
9014 L=3
GO TO 72
6 L=JJ+ICT+2
V2=3.
NL=3
IF(JA.NE.-9998)GO TO 8006
NL=ICT+1
L=L-2
8006 DO 9022 K=NL,L
9022 V(K)=VX(K-NL+1)
IF(IAMP.LT.0)GO TO 72
READ(5,5900)INP
PRINT 3000,INP
IAMP=0
DO 90221 K=1,72
N=INP(K)
IF(N.NE.ISTAR)GO TO 90221
IAMP=-1
GO TO 90222
90221 IF(N.EQ.ISEMI)GO TO 90222
90222 ML=1
JA=-9998
ICT=ICT+L
GO TO 1899
9015 JA=0
C L+100=MACH.LANG. UNIT GENS. L=FORTR. UNIT GENS.
V4=IZ+100
IF(IZ.EQ.6)LPAR=1
GO TO 2899
9018 ISUB=8
V4=4.
GO TO 2899
8 V5=VX1
V2=11.
L=5
CVTX=V5
GO TO 72
1129 IF(LPAR)2129,2129,222
222 L=5
V2=12.
V4=8.
V5=1.
LPAR=-1
GO TO 72
2129 ISUB=7
LPAR=0
DO 107 K=1,6
107 VX(K)=0
ML=ML+5
GO TO 1899
5900 FORMAT(72A1)
1107 FORMAT(A4,72A1)
3001 FORMAT(1XA4,72A1)
7 IF(VX1.NE.0)IXIN=VX1
IF(VX2.NE.0)TF=VX2
IF(VX3.NE.0)AMPFAC=VX3
OP1=VX4
IF(VX5.NE.0)DURX=VX5
DEBUG=VX6
C TYPE 'SCORE', RAN NUM, TF=TEMPO FACTOR(0=1), AMPFAC=AMPL.FACT(0=1)
C OP1=SECONDS TO BE OMITTED,
C DURX=DUR AT CUTOFF, DEBUG>0 PRINTS 'V' ARRAY.
C *************** READS INPUT ***********************
2308 READ(5,1107)J,INP
IF(J.EQ.IBLA)GO TO 2308
PRINT 3001,J,INP
MLX=1
JA=-1
ISUB=9
JMP=5
VX1=0
VX2=0
VX3=0
LK=-1
K=0
IF(V(I-1).NE.-9900.-BY)GO TO 6773
BY=-1.
I=I-1
6773 K=K+1
IF(K.GT.NINS)GO TO 36
IF(INST(K).NE.J)GO TO 6773
LK=K
GO TO 1773
36 IF(J.EQ.IRUN.OR.J.EQ.IRUN2)GO TO 4337
IF(J.EQ.ITMPO)GO TO 1773
LK=NINS+1
IF(LK.GT.KZY)CALL EXIT
INST(LK)=J
IZ=LK
GO TO 1773
4337 IF(V(I-1).EQ.-9900.-BY)I=I-1
V(I)=-19899.
IF(DEBUG.NE.0)CALL RUNIT
N=1
5002 K=N+1
IF(N.GT.I)CALL RUNIT
IF(V(N).GE.0)GO TO 1002
PRINT 4002,V(N)
N=N+1
GO TO 5002
1002 J=V(K)+K-1
IF(J.LT.N)J=N
PRINT 4002,(V(K),K=N,J)
N=J+1
GO TO 5002
4002 FORMAT(10F12.3)
9 IF(LK.LE.NINS)GO TO 8773
IF(IALL.EQ.0)GO TO 1004
IF(IDALL.GT.0)GO TO 8773
BG(LK)=VX1
IDALL=LK
GO TO 2004
1004 BG(LK)=VX1
C MAY 3,71 **** ALL PARAMS WILL BE SET UP AT TIME 0. CHECK EFFECT ON 'MOVE'!
C ******** APR.23, 1971 FIXES BG TIMES IN 'MOVE'?????!!!!!!!
IF(LK.EQ.IZ)VX1=0
2004 NINS=LK
IF(VX3.NE.0)VX2=10000.+VX3
IF(VX2.EQ.0)VX2=-1
DUR(LK)=VX2
GO TO 900
8773 IF(VX2.NE.0)VX1=VX1*10000.+VX2
900 IF(VX1.EQ.BY)GO TO 5773
BY=VX1
K=V(I-1)/(-9900.)
IF(K.GE.1.AND.K.LE.NINS)I=I-1
V(I)=-9900.-BY
I=I+1
IF(NWZ.EQ.0)GO TO 4308
DO 9703 K=1,NWZ
9703 IF(BY.EQ.BNW(K))GO TO 5773
4308 NWZ=NWZ+1
BNW(NWZ)=BY
5773 IF(J.EQ.ITMPO)GO TO 1106
4773 NW=LPAR
JMP=2
1299 IF(JZ.NE.0)GO TO 1773
7773 READ(5,5900)INP
IF(INP(1).EQ.IBLA)GO TO 7773
PRINT 3000,INP
MLX=1
C 'LISTS' END WITH *
1773 JZ=0
IALL=0
17731 ML=MLX
DO 236 JD=ML,72
JF=INP(JD)
C """""""""" MAY 13,71 /Z(D4/E/X 2 3/)CS/ ETC. CAN USE 26 LABELS.
33611 IF(JF.NE.ILFP.AND.JF.NE.IRTP)GO TO 2361
INP(JD)=IBLA
L=JD-1
1113 IF(INP(L).NE.IBLA)GO TO 2113
L=L-1
GO TO 1113
2113 IF(JF.EQ.IRTP)GO TO 3361
IF(PARENS.EQ.0)GO TO 1140
LCNT=LCNT+3
MOT=LCNT-1
1140 LIST(LCNT)=INP(L)
PARENS=-1.
INP(L)=IBLA
C ALLOWS FOR SPACE AFTER IDENTIFIER
LIST(LCNT+1)=I
GO TO 236
3361 IF(PARENS.EQ.0)GO TO 2140
LIST(LCNT+2)=I-1+IAMP
C +IAMP IS TO ADD SPACE FOR CVT IN V ARRAY.
LCNT=LCNT+3
PARENS=0
GO TO 236
2140 LIST(MOT)=I-1+IAMP
GO TO 236
C """"""""""" LAST ) CAN'T APPEAR AT END OF LINE!!
C @@@@@@@@@@@@ /@Z/DS3/ ETC.
2361 IF(JF.NE.IAT)GO TO 5361
DO 113 L=1,72
K=JD+L
JG=INP(K)
IF(JG.NE.IMIN)GO TO 6113
RETRO=0
GO TO 113
6113 IF(JG.NE.IDOL)GO TO 7113
C IDOL IS FOR INVERSIONS IN 'NOTES'
INVRT=0
GO TO 113
7113 IF(JG.NE.IBLA)GO TO 4113
113 CONTINUE
4113 DO 6361 L=1,LCNT,3
IF(JG.NE.LIST(L))GO TO 6361
VX1=0
DO 40 M=JD+2,72
JG=INP(M)
IF(JG.EQ.IBLA)GO TO 40
ML=M
IF(JG.EQ.KSLA.OR.JG.EQ.ISEMI.OR.JG.EQ.ISTAR)GO TO 140
GO TO 240
40 CONTINUE
240 JC=JA
JA=-1
ICT=ISUB
ISUB=15
INP(K)=IBLA
GO TO 1899
15 ISUB=ICT
JA=JC
140 JC=1
KN=LIST(L+1)
M=LIST(L+2)+1
IF(RETRO)GO TO 640
JC=M-1
M=KN-1
KN=JC
JC=-1
RETRO=-1.
640 IF(INVRT)GO TO 940
840 X=V(KN)
V(I)=X+VX1
C FINDS CENTER FOR INVERSION (+TRANSP.)
I=I+1
KN=KN+JC
IF(V(KN-JC).NE.85.)GO TO 940
V(I-1)=85.
GO TO 840
940 Z=V(KN)
IF(INVRT.EQ.0)GO TO 440
IF(VX1.EQ.0)GO TO 540
C " @Q N " WHERE N= 1/2 STEPS IN 'NOTES' OR MULT FACTOR IN OTHERS.
IF(CODE.EQ.-33.)GO TO 440
V(I)=Z*VX1
GO TO 7361
440 IF(Z.EQ.85.)GO TO 540
Y=0
IF(INVRT.EQ.0)Y=(X-Z)*2.
V(I)=Z+VX1+Y
GO TO 7361
540 V(I)=Z
7361 I=I+1
KN=KN+JC
IF(KN.NE.M)GO TO 940
INVRT=-1
RB=V(I-1)
ICT=-1
DO 8361 L=JD,72
JG=INP(L)
INP(L)=IBLA
IF(JG.EQ.KSLA)GO TO 9361
IF(JG.EQ.ISEMI)GO TO 2722
8361 IF(JG.EQ.ISTAR)ICT=0
9361 MLX=L+1
IF(ICT.LT.0)GO TO 17731
JZ=-1
2722 IF(ICT.LT.0)GO TO 7773
IAMP=-1
GO TO 3013
6361 CONTINUE
CALL EXIT
C @@@@@@@@@@@@@@@@@@@@@@@@@@
5361 IF(JF.NE.IAA)GO TO 4361
C FINDS 'ALL'.
IF(INP(JD+1).NE.IEL)GO TO 236
INP(JD)=IBLA
INP(JD+1)=IBLA
INP(JD+2)=IBLA
IALL=-1
GO TO 236
C TYPE 'ALL' AFTER PARAM NUM TO PUT DATA IN ALL INSTS.
4361 IF(JF.NE.KSLA)GO TO 636
MLX=JD+1
JZ=-1
INP(JD)=ISEMI
436 IF(INP(MLX).NE.IBLA)GO TO 336
MLX=MLX+1
GO TO 436
636 IF(JF.NE.ISEMI)GO TO 936
336 IF(JMP.GT.4)GO TO 1899
GO TO (101,102,103,104),JMP
C INST PAR MOV LIST OTHERS
936 IF(JF.NE.IDOT)GO TO 736
IF(CODE.NE.-22.)GO TO 236
C DOT ONLY USED IN 'RHYTHM'.
L=INP(JD+1)
DO 836 KL=1,10
836 IF(L.EQ.IDAT(KL))GO TO 236
INP(JD)=1
GO TO 236
C CHANGES DOTTED RHYTHMS TO '1'S.
736 IF(JF.NE.ISTAR)GO TO 236
IAMP=-1
INP(JD)=ISEMI
236 CONTINUE
CALL EXIT
C IF ERROR - THEN EXIT.
102 NX=INP(ML)
IZ=ML
ML=ML+1
ISUB=13
IF(NX.EQ.IBLA)GO TO 102
JA=-1
IF(NX.EQ.IPP)GO TO 1899
IF(NX.EQ.IE)GO TO 2308
IF(NX.EQ.IR)GO TO 4337
IF(NX.EQ.ID)GO TO 7720
IF(NX.EQ.II)GO TO 1899
CALL EXIT
13 LPAR=VX1
IF(NX.NE.II)GO TO 136
INUM(LK)=LPAR
GO TO 1299
136 IAMP=0
IF(IALL.LT.0)ALL(LK,LPAR)=0
CVT=0
IF(LPAR.EQ.2)CVT=1.
IF(LPAR.GT.NP(LK).AND.LPAR.LT.31)NP(LK)=LPAR
IF(LPAR.EQ.32)LPAR=1
V(I)=LPAR+LK*10000
C +1=WDCNT, +2=CODE, +3='NM' CCCCC
IJ=I+1
I=I+4
ITMP=0
CODE=0
NFLG=1
ML=IZ+M
C M IS NUM. OF DIGITS IN PARAM NUM.
5702 ML=ML+1
IF(ML.GT.72)CALL EXIT
N=INP(ML)
IF(N.EQ.IBLA)GO TO 5702
NL=INP(ML+1)
JA=0
IF(N.EQ.IR)GO TO 6702
IF(N.EQ.IEN)GO TO 6005
IF(N.EQ.IEM.OR.N.EQ.ISS)GO TO 2007
IF(N.EQ.ID.AND.NL.EQ.IF)GO TO 7702
IF(N.EQ.ISEMI)GO TO 2018
IF(N.EQ.IPP)JA=-1
ISUB=1
GO TO 1899
C RE=REP R=RHY M=MOVE N=NOTES NU=NUM S=SUBR
6702 JA=-1
IF(NL.EQ.IE)GO TO 2703
CODE=-22.
CVT=1.
C P2 AND 'RHY' ALWAYS CONVERT AS 'DUR'.
GO TO 1016
6005 CODE=-33.
IF(NL.EQ.IU)GO TO 9702
CVT=-1.
GO TO 1016
9702 CODE=-44.
JA=-1
2007 NL=ML+2
DO 1007 KN=NL,72
JJ=INP(KN)
IF(JJ.EQ.IF)CVT=-1.
IF(JJ.EQ.ID)CVT=1.
1007 IF(JJ.EQ.ISEMI)GO TO 3007
3007 IF(N.EQ.ISS)GO TO 5007
IF(N.NE.IEM)GO TO 1016
4007 BW=V(IJ-2)
IC=0
DO 7031 K=ML+1,72
IF(INP(K).EQ.ISEMI)GO TO 8031
7031 IF(INP(K).EQ.IXX)IC=-1
8031 I=I-1
V(I)=0
X=-9900.-BY
IF(BY.EQ.0)X=-9900.-BG(LK)
IF(BW.EQ.X)GO TO 8005
IF(BW.NE.-9900.-BY)GO TO 1102
V(IJ-2)=X
GO TO 8005
1102 V(IJ)=V(IJ-1)
C IF BG>0, 'MOVE' POINTERS ARE NOT SET UP AT TIME 0.
V(IJ-1)=X
IJ=IJ+1
I=I+1
8005 LP=IJ-1
BW=-(X+9900.)
ISUB=2
JMP=3
IZ=-1
4703 GO TO 1299
103 IF(IZ.LT.0)GO TO 2102
BW=V(ICT)+BW
V(I)=-9900.-BW
V(I+1)=V(LP)
V(I+2)=JJ+3
V(I+3)=CODE
I=I+4
IZ=1
2102 IF(BW.GT.10000.)GO TO 6308
DO 5308 K=1,NWZ
5308 IF(BW.EQ.BNW(K))GO TO 6308
NWZ=NWZ+1
BNW(NWZ)=BW
6308 VX3=-9900.
VX2=VX3
GO TO 1899
2 IF(VX3.NE.-9900.)GO TO 3102
IF(VX2.NE.-9900.)GO TO 4102
VX2=VX1
VX1=10000.
4102 VX3=VX2
JJ=3
C 1,2 OR 3 NUMS CAN BE USED IN NON-RAN MOVES.
3102 IF(IZ.GE.0)GO TO 3006
V(IJ)=JJ+3
CODE=-55.
IF(JJ.NE.3)CODE=-57.
IF(NFLG.LT.0)CODE=CODE-1.
IF(IC.LT.0)CODE=-59.
V(IJ+1)=CODE
C -10000. MEANS 'NOTES AT BG TIME 0'
C CODE=-56 OR -58 FOR NOTES.
IZ=0
3006 IF(NFLG.EQ.1)GO TO 5005
CVT=-1
IF(VX2.GT.VX3)VX2=VX2+.999
IF(VX3.GE.VX2)VX3=VX3+.999
IF(JJ.EQ.3)GO TO 5005
IF(VX4.GT.VX5)VX4=VX4+.999
IF(VX5.GE.VX4)VX5=VX5+.999
C FOR RAN. SELEC. OF NOTES. FINDS HIGHEST NOTE.
5005 ICT=I
IJ=IJ+1
DO 1006 K=1,JJ
1006 V(IJ+K)=VX(K)
I=I+JJ
V(I)=CVT
I=I+1
IJ=I+2
IF(IAMP.EQ.0)GO TO 1299
C*************** MAY 18,71 ***** ALWAYS RESETS TO TIME 0 WHEN MOVE IS USED.
V(I)=-9900.-BY
8703 I=I+1
GO TO 4773
5007 V(IJ)=3.
V(IJ+1)=-11.
V(I-1)=CVT
GO TO 4773
7702 CODE=-45
JA=-1
GO TO 1016
C ABOVE FOR DUTY FACTOR
1 I=I+JJ
ISUB=0
V(IJ+1)=NNUM
IF(NNUM.EQ.-2)CVT=-1.
IF(JJ.EQ.1)GO TO 4006
C IF IT IS '-2' THEN NOTES ARE PRINTED
IF(NNUM.NE.-2)GO TO 5006
IX=IJ+3
DO 2006 K=2,JJ,3
X=VX(K)
Y=VX(K+1)
IF(X.GT.Y)VX(K)=X+.999
2006 IF(Y.GE.X)VX(K+1)=Y+.999
5006 IX=IJ+2
DO 1001 K=1,JJ
1001 V(IX+K)=VX(K)
C FOR RAN. SELEC. OF NOTES. FINDS HIGHEST NOTE.
GO TO 3013
4006 IF(JA)VX1=VX1/100.+9999.
C CHANGES /P5 P3/ TO /P5 9999.03/
V(I-1)=VX1
GO TO 3013
2703 ISUB=4
C 'REP'
VX1=0
VX2=0
VX3=0
ML=ML+1
GO TO 1899
4 V(IJ)=3.
V(IJ+1)=-66.0
IF(VX1.EQ.32.)VX1=1.
IF(VX1.EQ.0)VX1=LPAR
IF(VX2.EQ.0)VX2=LK-1
V(IJ+2)=VX1+VX2*10000.
KL=VX2
IF(DUR(LK).LT.0)DUR(LK)=DUR(KL)
IF(VX3.EQ.0.OR.LK.EQ.NINS)GO TO 4773
18 ML=LK+1
DO 1018 KL=ML,NINS
IF(LPAR.GT.NP(KL).AND.LPAR.LT.31)NP(KL)=LPAR
V(I)=V(I-4)+10000.
V(I+1)=3.
V(I+2)=-66.
V(I+3)=V(I-1)
IF(DUR(KL).LT.0)DUR(KL)=DUR(LK)
1018 I=I+4
GO TO 4773
2018 V(IJ)=3.
V(IJ+1)=-66.
V(IJ+2)=NW+LK*10000
GO TO 4773
7720 V(I)=LK
V(I+1)=3.
V(I+2)=-67.
ML=ML+4
ISUB=14
GO TO 1899
14 V(I+3)=VX1
I=I+4
L=VX1
IF(NP(LK).LT.NP(L))NP(LK)=NP(L)
IF(DUR(LK).LT.0)DUR(LK)=DUR(L)
GO TO 4773
C TYPE 'DUPL N;' N=INST # TO BE DUPLICATED.
C ***** SCANNER *************************
2899 ML=ML+3
1899 IF(INP(ML).EQ.ISEMI.AND.ISUB.EQ.3)GO TO 1014
NNUM=-1
NL=0
ISKP=0
JJ=0
XMINUS=1.
999 IDECI=-1
IF(ISUB.EQ.6)XMINUS=1.
C ABOVE FOR READING MINUS AND PLUS NUMBS. IN GEN CARDS.
M=0
2799 N=INP(ML)
899 ML=ML+1
IF(N.EQ.ISEMI)GO TO 751
IF(N.NE.IBLA.AND.N.NE.ICOM)GO TO 510
4702 IF(ISKP)202,2799,2799
510 IF(JA.LT.0)GO TO 70
DO 77 K=1,12
IF(N.NE.ISCA(K))GO TO 77
IF(K.NE.2.AND.K.NE.4)GO TO 511
IF(ISUB.EQ.5)GO TO 511
NSWCH=K-4
GO TO 2799
C TO SWITCH ALWAYS USE OCT.# /PBF4/ /NE5/ P=PROXIMITY, N=NORMAL
511 NNUM=K
NFLG=-1
N=INP(ML)
IF(N.NE.IF)GO TO 6410
NNUM=NNUM-1
GO TO 7410
6410 IF(N.NE.ISS)GO TO 8410
NNUM=NNUM+1
7410 ML=ML+1
N=INP(ML)
GO TO 3410
8410 IF(N.NE.IU.AND.N.NE.IR)GO TO 3410
NNUM=-1
CVT=1.
IF(N.EQ.IR)CVT=-1.
GO TO 5551
3410 ML=ML+1
JJ=JJ+1
IF(ISUB.EQ.5)GO TO 1410
IF(N.NE.IEN)GO TO 371
VX(JJ)=86.
IF(DUR(LK))DUR(LK)=1000.
IAMP=-1
GO TO 5551
371 IF(N.EQ.ISEMI.OR.N.EQ.IBLA)GO TO 9410
DO 177 KN=2,8
IF(N.NE.IDAT(KN))GO TO 177
JSCA=KN-2
GO TO 2410
177 CONTINUE
GO TO 1411
9410 KN=-1
1411 IF(NSWCH.EQ.0)GO TO 2410
IF(KN)GO TO 2411
IF(N.EQ.IPLUS)NOLD=NOLD+6
IF(N.EQ.IMIN)NOLD=NOLD-6
C /B/B-/ JUMPS DOWN OCT., /B/B+/ UP OCT.
2411 IF(NOLD-NNUM.GT.5.AND.JSCA.LT.7)JSCA=JSCA+1
IF(NOLD-NNUM.LT.-5.AND.JSCA.GT.0)JSCA=JSCA-1
C WILL JUMP TO NEAREST NOTE *********** MAY 22,71
2410 VX(JJ)=JSCA*12+NNUM
NOLD=NNUM
4410 NNUM=-2
IF(INP(ML).EQ.ISEMI)GO TO 5551
GO TO 310
C OCTAVE NUM WILL STICK UNTIL RESET
77 CONTINUE
C ABOVE FINDS SCALE NOTES
70 IF(N.NE.IMIN)GO TO 71
XMINUS=-1
GO TO 2799
210 JJ=JJ+1
IF(JJ.EQ.1)GO TO 3310
XMINUS=1.
VX(JJ)=0
C 'X N1,N2' MAY REPLACE 'REP N1,N2'. IF N2=0 THEN N2=2
GO TO 310
71 IF(N.EQ.IXX)GO TO 210
IF(N.EQ.IR)GO TO 73
1410 DO 78 K=1,11
IF(N.NE.IDAT(K))GO TO 78
ISKP=-1
IF(N.NE.IDOT)GO TO 79
IDECI=M
GO TO 75
79 M=M+1
IQ(M)=K-1
GO TO 75
78 CONTINUE
IF(N.EQ.KSLA)N=ISEMI
75 IF(ML.GT.73)CALL EXIT
CC WHY THE NEXT CHANGE? FOR DOTS MAYBE. IF(N.NE.ISEMI)GO TO 2799
IF(N.NE.ISEMI.AND.INP(ML).NE.1)GO TO 2799
751 IF(ISKP.EQ.0)GO TO 5551
202 IF(ISUB.EQ.5)GO TO 502
IF(IDECI.NE.-1)GO TO 302
IDECI=0
GO TO 402
302 IDECI=M-IDECI
402 NN=0
IEXP=M-1
IF(M.LT.1)M=1
DO 171 K=1,M
KN=10**IEXP
C BECAUSE '**0' DOES NOT WORK!!
IF(IEXP.EQ.0)KN=1
NN=NN+IQ(K)*KN
171 IEXP=IEXP-1
A=10**IDECI
C BECAUSE '**0' DOES NOT WORK!!
IF(IDECI.EQ.0)A=1.
JJ=JJ+1
VX(JJ)=NN/A*XMINUS
IF(ISUB.EQ.13)GO TO 13
1310 IF(INP(ML).NE.1)GO TO 310
C FOR DOTTED NOTES.
VX(JJ+1)=VX(JJ)*2.
JJ=JJ+1
ML=ML+1
GO TO 1310
206 ML=ML+2
3310 VX(JJ)=-99.
310 ISKP=0
IF(N.NE.ISEMI)GO TO 999
5551 GO TO(1,2,3,4,5,6,7,8,9,9,11,12,13,14,15),ISUB
502 JD=IQ(1)
IF(M.GT.1)JD=JD*10+IQ(2)
C NUMBERS UP TO 2 DIGITS ONLY
C PARAMETERS WILL PRINT +2 FOR PASS3. USE P2-30 ONLY. WILL PRINT P4-32.
C USE P33-35 FOR STORAGE IN UNIT GENS.
IF(NNUM.EQ.11)NNUM=100
IF(NNUM.EQ.6)NNUM=-(100+2*JD)
IF(NNUM.EQ.12)NNUM=-(2*JD)
C ABOVE IS TAKEN CARE OF AT 510+5
VX(JJ)=JD+NNUM
C IQ=OCTAVE N., NNUM=NOTE N.
NNUM=-1
GO TO 310
73 JJ=JJ+1
IF(INP(ML).EQ.IE)GO TO 206
C NEXT IS FOR A REST ('R')
VX(JJ)=85.
GO TO 4410
1106 KTMP=1
TP=60.
IAMP=0
BW=BY
ITMP=-1
JMP=5
ISUB=11
JA=-1
GO TO 2016
3019 V(I)=990000.00
V(I+1)=4.
V(I+2)=VX1
V(I+3)=VX2/TP
V(I+4)=VX3/TP
I=I+5
BY=BW
IF(VX1.EQ.0)GO TO 2308
BW=BW+VX1
V(I)=-9900.-BW
I=I+1
DO 3003 K=1,NWZ
3003 IF(BW.EQ.BNW(K))GO TO 9003
NWZ=NWZ+1
BNW(NWZ)=BW
9003 IF(IAMP)GO TO 4003
2016 VX3=0
VX2=0
GO TO 1299
11 IF(VX2.NE.0)GO TO 111
VX2=VX1
VX1=0
111 IF(VX3.EQ.0)VX3=VX2
IF(VX2.LT.11.)TP=1.
IF(J.EQ.ITMPO)GO TO 3019
PCH(1,KTMP)=VX1
PCH(2,KTMP)=VX2
PCH(3,KTMP)=VX3
C PCH(1)=TIME (2)=MM1 (3)=MM2
KTMP=KTMP+1
IF(IAMP.EQ.0)GO TO 2016
4003 VX1=0
IAMP=0
VX2=VX3
IF(J.EQ.ITMPO)GO TO 3019
PCH(1,KTMP)=0
PCH(2,KTMP)=VX2
PCH(3,KTMP)=VX2
C UP TO 30 ITMPO CHANGES MAY BE MADE.
1016 IA=I
IZ=1
3100 V(I-2)=CODE
ISUB=3
JMP=4
KZ=0
5016 IF(IAMP.GE.0)GO TO 1299
117 IF(IZ-2)3013,9004,9004
104 K=INP(ML)
IF(K.EQ.ITT)GO TO 1106
IF(K.EQ.ISEMI)GO TO 1014
IF(K.NE.IBLA) GO TO 1899
ML=ML+1
GO TO 104
3 IF(VX1.EQ.-99.)GO TO 4022
IF(CODE.LT.-22.)GO TO 17
2017 VX1=4./VX1
IF(JJ.NE.1)GO TO 2014
V(I)=VX1
GO TO 114
2014 DO 9006 L=2,JJ
IF(VX(L).EQ.0)GO TO 17
9006 VX1=4./VX(L)+VX1
JJ=1
17 V(I)=VX1
IF(JJ.EQ.1)GO TO 114
L=VX(JJ)-1
X=V(I)
NL=I+1
I=L+I
DO 1017 K=NL,I
1017 V(K)=X
C ADDS UP TOTAL OF NOTES IN SEQ.
IZ=IZ+L
GO TO 114
1014 V(I)=RB
114 RB=V(I)
I=I+1
IZ=IZ+1
GO TO 5016
4022 JC=VX2+.3
JD=VX3-.9
IF(JJ.EQ.2)JD=1
IZ=IZ+JC*JD
C JC=HOW MANY TIMES, JD=HOW MANY NOTES
DO 1005 K=1,JD
NL=I+JC-1
DO 2005 L=I,NL
2005 V(L)=V(L-JC)
1005 I=I+JC
RB=V(NL)
GO TO 5016
9004 IF(ITMP.EQ.0)GO TO 3013
KA=1
IC=1
K=0
Z=0
RC=0
9007 Y=PCH(3,IC)/TP
X=PCH(2,IC)/TP
Z=PCH(1,IC)
YY=2.*Z/(Y+X)
224 IF(YY.NE.0)YY=2.*(Z-X*YY)/YY**2
RAX=X
Z=PCH(1,IC)
XA=RA
RD=1
RB=0
ZZ=Z
7020 RA=V(IA+K)
4020 RD=1
IF(RA.LT.0)RD=-1.
RA=RA*RD
IF(KA.EQ.0)RA=RA-RC
W=RA
RB=W
IF(W.LE.Z)GO TO 2020
IF(Z.NE.0)GO TO 3020
RA=RA/Y
RB=-1.
RC=0
GO TO 8020
3020 W=Z
RC=W+RC
GO TO 24
2020 RC=0
24 IF(X.NE.Y)GO TO 424
RA=W/X
GO TO 8020
C DUR OF TMP + BG TIME OF TMP - NOTE VALUE - BG TIME OF NOTE
C CHN=TBG.
424 RA=(-2.*RAX+(4.*RAX**2+8.*YY*W)**.5)/(2.*YY)
RAX=RAX+YY*RA
8020 IF(KA.EQ.0)RA=RA+XA
KA=1
IF(RC.NE.0)GO TO 1011
V(IA+K)=RA*RD
IF(K.EQ.IZ)GO TO 3013
1011 K=K+1
IF(ZZ.NE.0)Z=Z-W
IF(Z.GT.0.OR.RB.EQ.-1.)GO TO 7020
IC=IC+1
IF(RB.EQ.W)GO TO 9007
KA=0
K=K-1
GO TO 9007
3013 V(I)=CVT
I=I+1
L=I-IJ
V(IJ+2)=L-4
V(IJ)=L
GO TO 4773
END
SUBROUTINE RUNIT
C******************************
DIMENSION VY(30),VZ(30),XT(10),IVG(8),PX1(10)
1,IPT(10,31)
COMMON /X/ P(30),J,L,CNT(10),BT,MK,VX(35),PL(30),DF,IXIN,NINS,TF,
1 ROFF(10),V(2000),NP(10),NCNT(10,32),INST(11),DUR(11),IALL,
1DURX,AMPFAC,BNW(40),IT(30),I,OP1,INUM(10),BG(80),INP(72),TP,
1NWZ,CVTX,ISCA(12),IDAT(11),IQ(25),SCAL(86),MU5(14)
1,LIST(78),ALL(10,31)
EQUIVALENCE (P1,P(1)),(P2,P(2)),(P3,P(3)),(VZ2,VZ(2)),(P4,P(4))
DATA IAMP/0/,IT3/0/,K/1/,P1/0/,T6/10000./,NW/1/,A/0/,
1NWX/0/,TDUR/0/,T2/1./,T4/1./,T5/0/,PR/0/,IVG/'GENA','GENB','GENC',
1'GEND','VARA','VARB','VARC','VARD'/,BLA/' '/,CHN/0/,RTF/.05/
J=1
MK=0
NWZZ=0
BG(NINS+1)=19999.
T6=10000.
DO 2118 K=1,NINS
M=NP(K)
IT(K)=0
IPT(K,31)=0
NCNT(K,31)=1
DO 2118 L=1,M
NCNT(K,L)=1
2118 IPT(K,L)=0
DO 5013 K=1,IXIN
5013 X=RAND(0.0,0.0)
IF(IALL.EQ.-1)GO TO 600
IL=NP(KZY)
X=DUR(KZY)
DO 6002 K=1,NINS
IF(DUR(K).LT.0)DUR(K)=X
6002 IF(NP(K).LT.IL)NP(K)=IL
C OUTPUT LOOP FROM HERE ON
600 IL=0
NWX=NWX+1
MK=MK+1
Y=BNW(NW)
723 IL=IL+1
3723 Z=V(IL)
IF(Z.EQ.-19899.)GO TO 732
IF(Z.NE.-9900.-Y)GO TO 723
2723 IL=IL+1
729 K=IL+2
C******** NEW 'ALL' ITEM GOES HERE. *******
RD=V(K)
IF(RD.EQ.-67.)GO TO 3726
LK=V(IL)/10000.+.2
IF(LK.GE.98)GO TO 7700
LP=V(IL)-LK*10000
C LK=INST # LP=PARAM #
LN=IPT(LK,LP)
IPT(LK,LP)=IL+2
IF(RD.EQ.-66.)GO TO 726
IF((RD.EQ.-55.).OR.(RD.EQ.-56.))GO TO 1726
2727 ML=IPT(LK,LP)
CC IF(IDALL.OR.LK.LT.KZY)GO TO 3727
IF(ALL(LK,LP))GO TO 3727
M=LK+1
C 'ALL' EFFECTS ONLY HIGHER INST. NUMBS.
DO 4727 KL=M,NINS
IF(NP(KL).LT.LP.AND.LP.LT.31)NP(KL)=LP
IPT(KL,LP)=ML
NCNT(KL,LP)=10000
IF(DUR(KL))DUR(KL)=1000.
C ASSUMES THAT DURATIONS ARE SET IN 'NOTES'.
4727 ALL(LK,LP)=-1.
C AFTER 'ALL' IS USED ONCE IT WORKS LIKE DUPL OR REP.
GO TO 2150
3727 IF(V(IL).NE.V(LN-1).OR.LN.EQ.0)GO TO 727
DO 1727 L=1,NINS
DO 1727 KL=1,NP(L)
IF(LN.NE.IPT(L,KL))GO TO 1727
NCNT(L,KL)=10000
IPT(L,KL)=ML
C RESETS POINTERS FOR DUPL AND REP INSTS.
1727 CONTINUE
727 NCNT(LK,LP)=10000
2150 IF(K.LT.0)GO TO 4726
IL=IL+V(IL+1)+1.3
IF(V(IL).LT.0)GO TO 3723
GO TO 729
726 RB=V(IL+3)
K=RB/10000.
L=RB-K*10000
IPT(LK,LP)=IPT(K,L)
GO TO 2727
3726 LK=V(IL)
M=V(K+1)
K=-1
KL=NP(M)
DO 4726 L=1,KL
LP=L
IPT(LK,L)=IPT(M,L)
IF(IPT(M,L).NE.0)GO TO 2727
4726 CONTINUE
IPT(LK,31)=IPT(M,31)
K=0
GO TO 2150
C ABOVE IS FOR DUPLICATION ROUTINE
7700 T2=V(IL+4)
T1=V(IL+3)
TBG=Y
TDUR=V(IL+2)
AC=2.*TDUR/(T1+T2)
AC=2.*(TDUR-T1*AC)/AC**2
8700 IF(TDUR.EQ.0)TDUR=10000.
T5=1.
T6=TBG+TDUR
IT3=1.
IF(LK.EQ.98)IT3=IL+2
T4=1.
GO TO 2150
1726 IF(V(IL-1).GT.-10000.)GO TO 2727
RA=BT
K=IL-1
2726 V(K)=-9900.-RA
L=K+5
RB=V(L)+V(L-1)
V(L-1)=RA
K=K+V(K+2)+2
IF((V(K).GT.-10000.).OR.(V(K+1).NE.V(IL)).OR.
1 (V(K).NE.-9900.-RB))GO TO 2727
RA=RA+V(L)
DO 5726 L=1,NWZ
5726 IF(RA.EQ.BNW(L))GO TO 2726
NWZ=NWZ+1
BNW(NWZ)=RA
GO TO 2726
C CONVERTS BG TIME OF NOTE NUM TO REAL TIME. DOESN'T WORK WITH -66!!
C NOW WE BEGIN ON!! NOTE NUM. NOT AFTER NOTE NUM.
732 IF(NWZ.LT.1)NWZ=1
DO 2602 K=NW,NWZ
2602 BNW(K)=BNW(K+1)
NWZ=NWZ-1
IF(NWZ.EQ.0)GO TO 2111
IF(NWZZ.EQ.1)GO TO 5111
NWZZ=1
IF(NWZ.EQ.1)GO TO 1111
DO 3111 K=1,NWZ
IF(BNW(K).LT.1000.)GO TO 3111
X=BNW(NWZZ)
BNW(NWZZ)=BNW(K)
BNW(K)=X
NWZZ=NWZZ+1
3111 CONTINUE
5111 IF(NWZZ.EQ.NWZ)GO TO 1111
L=NWZZ+1
X=BNW(NWZZ)
DO 4111 K=L,NWZ
IF(BNW(K).GT.X)GO TO 4111
RA=BNW(K)
BNW(K)=X
X=RA
4111 CONTINUE
BNW(NWZZ)=X
GO TO 1111
2111 NWZ=-1
C ABOVE ORDERS BNW DATA TO SAVE TIME AT 10 ON PG2.
1111 K=NWX-1
IF(NWX.NE.1)GO TO 1486
2 PRINT 111,I,IXIN,CVTX,TF
111 FORMAT(//' ***** SCORE *****',10X,
1'V ARRAY=',I4,'/2000 RANDOM NUMBER =',I6,4X,'SRATE=',F6.0,
14X,'TEMPO FACTOR=',F6.2/)
1486 IF((NWX.GT.1).AND.(IT(J).NE.-3))PRINT 3154,K,Y
IF(IT(J).EQ.-3)PRINT 5154,K,BX,INST(J)
DO 602 K=1,NINS
IF(DUR(K).LT.0)CALL EXIT
48 LK=INST(K)
IF(NCNT(K,31).NE.10000.AND.NWX.GT.1)GO TO 8826
IJ=IPT(K,31)
NCNT(K,31)=1
X=0
IF(IJ.NE.0)X=V(IJ+2)
RA=DUR(K)
IF(RA.GT.10000.)GO TO 83
PRINT 5396,LK,INUM(K),X,RA
GO TO 8826
5396 FORMAT(6XA4,'= INST NUM',I3,12X,
1'RANDOM TF =',F4.2,9X,'DURATION =',F6.2,'"')
7396 FORMAT(6XA4,'= INST NUM',I3,12X,
1'RANDOM TF =',F4.2,9X,'DURATION =',F5.0,'NOTES')
4396 FORMAT(12X'% RANDOM RESTS DUR=',F7.3,'", FROM',F6.3,' TO',F6.3)
485 FORMAT(35X'% RANDOM RESTS = ',F4.2)
83 RA=RA-10000.
PRINT 7396,LK,INUM(K),X,RA
8826 IF(NCNT(K,1).NE.10000)GO TO 602
IJ=IPT(K,1)
NCNT(K,1)=1
X=V(IJ+3)
IF(V(IJ).LT.6.)GO TO 7826
PRINT 4396,X,V(IJ+4),V(IJ+5)
GO TO 602
7826 PRINT 485,X
602 CONTINUE
715 IF(IT3.NE.1.)GO TO 1602
RA=T1*TP
RB=T2*TP
PRINT 6154,RA,RB,TDUR
IT3=0
1602 IF(NWX.EQ.1)GO TO 315
IF(IT(J).EQ.-3)GO TO 10
6154 FORMAT(' TMP=',F7.3,' TO',F8.3,' DURING',F6.2,' SECS.'/)
5154 FORMAT(/' << CHANGE',I3,' BEGINS ON NOTE',F5.0,2XA4,' >>'/)
902 FORMAT(2XA4/)
3154 FORMAT(/' << BASIC TIME OF CHANGE',I3,' IS',F8.3,'" >>'/)
4154 FORMAT(' THE FIRST',F9.4,'" ARE OMITTED'/)
IT(J)=IT(J)/10
GO TO 10
315 IF(OP1.NE.0)PRINT 4154,OP1
1601 IF(NWX.GT.1) GO TO 10
IF(TF.GT.10.)TF=TF/60.
TF=1000./TF
9926 DO 5015 K=1,NINS
IQ(K)=BG(K)*10000.
BG(K)=0
INP(K)=0
PX1(K)=0
5015 CNT(K)=0
BW=0
CVTX=511./CVTX
GO TO 500
10 M=0
JC=0
IF(NWZ.EQ.-1)GO TO 1740
DO 740 K=1,NWZZ
X=BNW(K)
IF(X.GT.BT.OR.X.LE.BW.OR.BW.LT.0)GO TO 2740
IT(J)=IT(J)*10
NW=K
GO TO 600
2740 IF((X.LT.1000.).OR.(X-J*10000.NE.CNT(J)+1))GO TO 740
X=BT+PR
NW=K
BX=CNT(J)+1.
IT(J)=-3
GO TO 600
740 CONTINUE
1740 IT(J)=0
31 KL=1
2031 CNT(J)=CNT(J)+1
ICT=CNT(J)
NPA=NP(J)
P1=PX1(J)
IF(BT.GE.DUR(J))GO TO 5174
IF(IQ(J).EQ.0)GO TO 200
P2=-IQ(J)/10000.
IQ(J)=0
CNT(J)=-1
ICT=-1
GO TO 4203
C MK IS FLAG FOR RESTS
200 MK=0
IF((BT.EQ.0.AND.J.EQ.1).OR.IPT(J,1).EQ.0)GO TO 203
KN=IPT(J,1)
IJ=V(KN)
IF(IJ.EQ.5)GO TO 1203
Z=(BT+9900.+V(KN-2))/V(KN+2)
IF(Z.GT.1.)Z=1.
Y=V(KN+3)
X=(V(KN+4)-Y)*Z+Y
IF(X.LE.0)IPT(J,1)=0
GO TO 204
1203 X=V(KN+3)
204 Y=RAND(0.0,1.0)
IF(Y-X.LT.0)MK=-1
203 DF=1.
C DUTY FACTOR ONLY SET IN SUBR.
DO 2155 L=2,NPA
IJ=IPT(J,L)
C******* NEW 'ALL' ITEM GOES HERE. *******
VX(L)=0
PM=1.
IF(IJ.GT.1)GO TO 2157
P(L)=0
GO TO 2155
2157 LN=IJ+2
NM=V(IJ-1)+LN-4
NL=V(IJ)
KN=NL/(-11)
IF(KN.EQ.0)GO TO 1100
GO TO (61,62,62,62,65,65),KN
1100 IF(V(IJ+1).EQ.1.)GO TO 1200
ML=3
1900 KA=1
VY(1)=0
DO 1156 K=LN,NM,ML
VY(KA+1)=V(K)+VY(KA)
1156 KA=KA+1
X=RAND(0.0,1.)
DO 1157 K=2,11
IF(X.GT.VY(K))GO TO 1157
KL=K-1
GO TO 1400
1157 CONTINUE
1400 LN=IJ+3*KL
RA=V(LN)
RB=V(LN+1)
PAR=RAND(RA,RB)
1300 IF(NL.EQ.-1)GO TO 1155
PM=2.
1061 ML=PAR
PAR=ML
GO TO 1155
1200 PAR=V(IJ+2)
GO TO 1300
61 X=P2
CALL SUBR
C SET CVT(IPAR) TO 1,0 OR -1 IN SUBR FOR DUR,--, OR FREQ.
IF(L.EQ.2)GO TO 4203
PM=PL(L)
CCC****** JUN 29,71
C****** JUN 29,71 IF(X.NE.P2)PR=P2
IF(X.EQ.P2)GO TO 2155
PR=P2
PP2=P2
GO TO 2155
C ABOVE IS FOR P2 CHANGES IN SUBROUTINE
C TF,TEMPO WILL AFFECT P2 ONLY WHEN P2 CALLS THE SUBR. IF P2 IS CHANGED BY OTHER
C CALLS ON SUBR. ALL TEMPO CHANGES WILL BE IGNORED!! (THEN DUR. IN SECS. MUST BE SET TO 'REAL TIME'.)
62 KL=NCNT(J,L)+1
IF(KL.GT.V(IJ+1))KL=1
PAR=V(IJ+KL+1)
4157 NCNT(J,L)=KL
IF(NL.EQ.-45)DF=PAR
IF(KN.NE.3)GO TO 1155
IF(PAR.EQ.86.)GO TO 5174
PM=2.
IF(PAR.EQ.85.)MK=-1
GO TO 5155
65 W=-9900.-V(IJ-3)
C W=BG TIME OF MOVE.
X=V(IJ-1)
IF(NL.EQ.-56.OR.NL.EQ.-58)PM=2.
Z=(BT-W)/V(IJ+1)
C Z= % OF WAY THROUGH.
IF(Z.GT.1.)Z=1.
Y=V(LN)
W=V(IJ+3)
IF(X.EQ.8.)W=V(IJ+4)
IF(NL.LT.-58)GO TO 16002
PAR=(W-Y)*Z+Y
IF(X.EQ.8.)GO TO 1600
2600 IF(PM.EQ.1.)GO TO 1155
GO TO 1061
16002 PAR=(W-Y+1.)**Z-1.+Y
IF(W-Y)PAR=(Y-W+1.)**(1.-Z)-1.+W
IF(X.NE.8.)GO TO 2600
W=V(IJ+5)
Y=V(IJ+3)
X=(W-Y+1.)**Z-1.+Y
IF(W-Y)X=(Y-W+1.)**(1.-Z)-1.+W
GO TO 16003
C NEXT IS FOR MOVING RAND RANGES.
1600 W=V(IJ+3)
X=(V(IJ+5)-W)*Z+W
16003 PAR=RAND(PAR,X)
GO TO 2600
4155 K=(PAR-9999.0)*100.+.1
P(L)=P(K)
PM=PL(K)
VX(L)=VX(K)
GO TO 2155
C ANY # OVER 9999. REPEATS ANOTHER PARAM.(9999.21 REPEATS P21)
1155 IF(PAR.GT.9999.)GO TO 4155
5155 P(L)=PAR
ML=V(IJ-1)-1.
VX(L)=V(ML+IPT(J,L))
IF(L.EQ.2)GO TO 4203
2155 PL(L)=PM
GO TO 1170
4203 PR=P2
RA=1.
RD=PR
IF(T5.EQ.0)GO TO 8203
IF((IT3.LE.1).OR.(BT.LT.TBG+TDUR))GO TO 6203
3155 IT3=IT3+3
TBG=TBG+TDUR
TDUR=V(IT3)
IF(BT.GE.TBG+TDUR)GO TO 3155
T1=V(IT3+1)
T2=V(IT3+2)
X=2.*TDUR/(T1+T2)
AC=2.*(TDUR-T1*X)/X**2
6203 RA=PR
IF(BT.EQ.TBG)XT(J)=T1
K=IT3
RC=0
RD=1.
KA=1
RB=0
Z=TDUR+TBG-BT
X=T1
Y=T2
YY=AC
CHN=TBG
ZZ=TDUR
GO TO 4020
8203 P2=RA*RD
7203 P2=P2*T4
X=P2*TF
K=X+.5
IF(X.LT.0)K=X-.5
CC****** JUN 29,71
72031 ROFF(J)=ROFF(J)+K-X
IF(ABS(ROFF(J)).LT.1.)GO TO 7155
Y=1.
IF(ROFF(J))Y=-1.
K=K-Y
ROFF(J)=ROFF(J)-Y
C ROUND-OFF GAP WILL NOT EXCEED .001
7155 PP2=K/1000.
IF(IPT(J,31).EQ.0)GO TO 6155
IF(ICT.EQ.-1)GO TO 1170
X=V(IPT(J,31)+3)
Y=RAND(1.-X,1.+X)
X=PP2
PP2=PP2*Y
IF(X-PP2+RTF)PP2=X+RTF
IF(PP2-X+RTF)PP2=X-RTF
C NEVER MORE THAN .1" DEVIATION WITH RAN TF. (RTF=.05 IN DATA.)
K=PP2*1000.+.5
PP2=K/1000.
6155 IF(ICT.GE.0)GO TO 2155
1170 IF(MK.LT.0.OR.PP2.LT.0)GO TO 2022
ZPAR=P1
PX1(J)=P1+PP2
C ZPAR IS USED HERE WHEN OP1(OMIT) IS .GT.0. OMIT IS IN REAL TIME.
L=INST(J)
IGENX=0
DO 4021 K=1,8
IF(L.NE.IVG(K))GO TO 4021
IGENX=K
GO TO 2170
4021 CONTINUE
INP(J)=P4
LK=0
DO 1021 K=1,NINS
1021 IF(PX1(K).GT.P1)LK=LK+INP(K)
IF(LK-IAMP-1.LT.0)GO TO 2170
IAMP=LK
AMPTIM=P1
2170 IF(P1.LT.OP1)GO TO 2612
P1=P1-OP1
C PUTS SPACES BETWEEN NOTES .GT. .05" APART
IF(A.GE.P1)GO TO 3170
PRINT 902
A=P1+.05
3170 X=INUM(J)
C INUM(J)=WHICH INST. DEFINITION BEING USED.
KL=0
NL=3
Y=1.
IF(IGENX.EQ.0)GO TO 4170
C IVG(K) HOLDS GEN AND VAR SPECIAL NAMES.
X=P3
IF(IGENX.LT.5)GO TO 3021
NL=2
Y=4
GO TO 7170
3021 Y=3.
C Y=3 FOR 'GENS'. Y=4 FOR 'VARS'.
DO 5170 K=6,30
IF(P3.EQ.2.)GO TO 5170
IF(P(K).EQ.511.)NPA=K
5170 VZ(K)=0
7170 DO 6170 K=2,30
ML=K+2
VX(K)=VX(ML)
IF(ML.GT.NPA)GO TO 5902
Z=P(ML)
IF(PL(ML).EQ.2)Z=30.868*2**(Z/12.)
GO TO 6170
5902 Z=0
6170 VZ(K)=Z
NPA=NPA-2
GO TO 8170
4170 IF(PL(3).EQ.2.)KL=P3+.5
DO 2021 K=3,30
IF(K.GT.NPA)GO TO 4902
Z=P(K)
IF(PL(K).EQ.2)Z=30.868*2**(Z/12.)
GO TO 2021
4902 Z=0
2021 VZ(K)=Z
VZ2=PP2*DF
C DUTY FACTOR CONVERSION
8170 IF(KL.GT.0)PRINT 2902,L,P1,X,VZ2,VZ(3),SCAL(KL),(VZ(K),K=4,
111),L,ICT,BT
IF(KL.EQ.0.)PRINT 9902,L,P1,X,(VZ(K),K=2,11),L,ICT,BT
C 'NOTES' MAY BE USED IN P3-30 BUT LETTER NAME WILL ONLY PRINT FOR P3!
IF(NPA.GT.11)PRINT 3902,(VZ(K),K=12,23),L,ICT,BT
C VX(K) HOLDS CONVERSION FLAG.
VY(2)=VZ2
DO 1902 K=NL,NPA
Z=VZ(K)
IF(VX(K).EQ.1.)Z=CVTX/Z
IF(VX(K).EQ.-1.)Z=CVTX*Z
1902 VY(K)=Z
NPA=NPA+1
VY(NPA)=CVTX/VZ2
C LAST PARAM NOW CONVERTED AS NOTE DUR. PASS3 WILL READ NEXT.
IF(Y.NE.1.)NPA=NPA-1
L=NPA+2
PRINT 3612,L,Y,P1,X,(VY(K),K=2,NPA)
WRITE (8)L,Y,P1,X,(VY(K),K=2,NPA)
C THIS IS WHAT PASS3 READS.
2612 P1=ZPAR
GO TO 21
3612 FORMAT(I3,F3.0,F7.2,F3.0,F7.2,30F9.3)
2902 FORMAT(1XA4,1XF7.2,F3.0,F7.2,F8.2,'(',A3,')',8F8.2,'< ',A4,' <',
1I3,F7.2)
9902 FORMAT(1XA4,1XF7.2,F3.0,F9.2,3X9F8.2,'< ',A4,' <',I3,F7.2)
3902 FORMAT(3X12F8.2,'< ',A4,' <',I3,F7.2)
C PRINTS RESTS
2022 PP2=ABS(PP2)
C IN THIS VERSION TYPE 'R' FOR RESTS IN ANY PARAM BUT PP2.
C FOR RESTS IN SEQS. TYPE -DUR.
C WHEN RANDOM RESTS ARE CHOSEN, SEQS. MISS NOTES.
C RAN RESTS ARE NOT TOUCHED BY SUBROUTINES!!!
INP(J)=0
PX1(J)=P1+PP2
IF(P1.LT.OP1)GO TO 21
X=P1-OP1
IF(A.GE.X)GO TO 121
PRINT 902
A=X+.05
121 PRINT 104,INST(J),X,PP2,ICT
21 PR=ABS(PR)
BG(J)=BT+PR
IF(ICT.EQ.DUR(J)-10000.)GO TO 5174
IF(BG(J).LT.DUR(J))GO TO 500
5174 BG(J)=19999.
DO 3174 K=1,NINS
C INSERTS CANT FOLLOW LAST REGULAR NOTE.(ADD REST IF INSERT AT END IS NEEDED.)
3174 IF(BG(K).LT.19999.)GO TO 500
GO TO 175
C CHOOSES INST WITH NEXT BEGIN TIME.
500 J=1
BW=BT
IF(NINS.EQ.1)GO TO 3022
5022 IF(BG(J).NE.19999.)GO TO 4022
J=J+1
GO TO 5022
4022 DO 22 K=2,NINS
22 IF((PX1(J).GT.PX1(K)).AND.(BG(K).NE.19999.))J=K
3022 BT=BG(J)
IF((BT.EQ.19999.).OR.(PX1(J).GE.DURX))GO TO 175
IF(CNT(J).GT.0)GO TO 1022
IF(CNT(J).EQ.0)PX1(J)=0
IF(CNT(J).EQ.-1)CNT(J)=0
C N.B. 'TF' CONTROLS BG TIME WHEN BG .GT. 0
1022 IF((BT.LT.T6).OR.(IT3.GT.1))GO TO 10
T4=T2
T5=0
T6=10000.
GO TO 10
175 Y=0
DO 105 K=1,NINS
X=PX1(K)-OP1
105 IF(Y.LT.X)Y=X
Y=Y+.5
C ADDS .5" OF SILENCE.
PRINT 7902, Y
L=2
Z=6.
PRINT 3612,L,Z,Y
WRITE (8)L,Z,Y
7902 FORMAT(' TER',F10.3,';'/)
603 FORMAT(I3,' INSTS. DURATIONS=',10F8.2)
TYPE 1603,AMPFAC,IAMP,AMPTIM
PRINT 1603,AMPFAC,IAMP,AMPTIM
DO 2175 K=1,NINS
2175 P(K)=PX1(K)-OP1
PRINT 603,NINS,(P(K),K=1,NINS)
TYPE 603,NINS,(P(K),K=1,NINS)
CALL EXIT
104 FORMAT(' ****',A4,2F9.3,7X,'REST <',I3)
1603 FORMAT(' AMPL. FACTOR=',F4.2,', MAX.AMP.=',I4,', AT TIME',
1 F8.3)
4020 RD=1
IF(RA.LT.0)RD=-1.
RA=RA*RD
IF(KA.EQ.0)RA=RA-RC
W=RA
RB=W
IF(W.LE.Z)GO TO 2020
IF(Z.NE.0)GO TO 3020
RA=RA/Y
RB=-1.
RC=0
GO TO 8020
3020 W=Z
RC=W+RC
GO TO 24
2020 RC=0
24 IF(X.NE.Y)GO TO 424
RA=W/X
GO TO 8020
C DUR OF TMP + BG TIME OF TMP - NOTE VALUE - BG TIME OF NOTE. CHN=TBG.
424 RAX=XT(J)
RA=(-2.*RAX+(4.*RAX**2+8.*YY*W)**.5)/(2.*YY)
XT(J)=RAX+YY*RA
8020 IF(KA.EQ.0)RA=RA+XA
KA=1
IF(RC.EQ.0)GO TO 8203
2011 XA=RA
IF(K.GT.1)GO TO 9920
K=I-6
ZPAR=-9900.-CHN-ZZ
DO 3011 KL=8,I
IF((V(K).EQ.ZPAR).AND.(V(K+1).EQ.990000.))GO TO 9920
3011 K=K-1
9920 W=ZZ
IF(V(K+3).LT.0)K=K+3
C ABOVE IS FOR TYPED IN ITMPO CHANGES
KA=K+3
ZZ=V(KA)
C DUR OF NEXT TEMPI
X=V(KA+1)
Y=V(KA+2)
213 KA=0
Z=ZZ
YY=2.*Z/(X+Y)
IF(YY.NE.0)YY=2.*(Z-X*YY)/YY**2
CHN=CHN+W
XT(J)=X
IF(KA.EQ.1)Z=0
RA=PR
KA=0
K=K+3
GO TO 4020
END
SUBROUTINE SUBR
COMMON/X/P(30),INST,IPAR,CNT(10),BT,IREST,CVT(35),PL(30),DF
C INST=INST N. IPAR=PARAM N. WHEN SUBROUTINE IS CALLED
C SET CVT(NPAR) TO -1.(FREQ), 0(AMPL.) OR 1.(DUR.) WHERE NPAR=PAR. TO BE CONVERTED
C IF NOTE NUMBERS ARE TO BE USED, SET PL(NPAR)=2.
C TO CREATE A REST IREST=-1. BT=BASIC TIME (P1 BEFORE TEMPO OR TF CHANGES.)
P(IPAR)=46.
IF(IPAR.EQ.10)RETURN
CVT(IPAR)=-1.
PL(IPAR)=2.
C P10=46. P11=440HZ
RETURN
END
INS 0 1; INSTRUMENT 1
OSC P6 P7 B2 F1;
OSC B2 P5 B2 F2/OUT B2 B1;
END ;
INS 0 2; INST 2
SET P5; P5 CAN CHANGE FUNC IN NEXT UNIT GENERATOR.
OSC P12 P4 B2 F12;
AD2 P7 B2 P11;
ENV P5 F1 B2 P9 P10 P11;
AD3 P7 B2 P8 B2;
MLT P7 B2 B3/RAN P6 B2 B4/RAH P7 B3 B2 ;
STR B2 B3 B2;
END ;
GEN 0 1 1 .5 0 .99 25;
-.5 128 0 256 1 511*; GEN INPUT MUST END WITH *
GEN 0 2 2 .3 .5 0 .4 4*; F2 , 3 HARMONICS (1,2,4)
GEN 0 3 3 1 -1*; F3 PUTS LINE FROM 1 TO -1 IN 511 STEPS
SCORE 35 .5 0 0 0 ;RAN NUM IS 35, TF=.5.
BUZZ 0 1 7; INST NAME, BG TIME=0, DUR=7 NOTES
P2 RHY/TEMPO/100 60 60*; SETS MM VALUE
4 ;QUARTER NOTE
8 16 X 2; 2 DOTTED 8THS
8 4; A DOTTED QUARTER
REP 2,2; LAST 2 DURATIONS PLAY TWICE
2 * ;HALF NOTE
;BLANKS OR COMMENTS MAY APPEAR WHERE INST NAMES EXPECTED
P6 ALL 10 DUR; 10 WILL BE IN P6 OF ALL INSTS.
P7 .33 A4,A .33 B3,B .34 C4,C ; FREQ??
P5 500 FREQ;
END ;
HISS 0 1 10/P5 REP 5 1/P2 NU DUR/1/2/3*;
I 1;
P3 NO;
C4/D/E/F/G;
A/B*;
P8 F1; THIS WILL CAUSE A NOTE TO PRINT
P7 NUMB;
1/2/3*;
END ;
ZAP 0 5;
DUPL 2;
P2 1 .1 .5 DUR;
P5 15 FREQ/END ;
RUN ;